package v1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

/**
 * @Description: 画板
 * @CreateTime: 2024-01-25  14:49
 * @Author: JAMILA
 * @Version: 1.0
 */

public class MyPanel extends JPanel implements KeyListener {
    //定义玩家坦克
    Hero hero = null;

    //定义敌人坦克
    int enemyTankNums = 3;
    Vector<EnemyTank> enemyTanks = new Vector<>();

    public MyPanel() {
        //初始化玩家坦克
        hero = new Hero(400, 400, 0, 1);

        //初始化敌人坦克
        for (int i = 0; i < enemyTankNums; i++) {
            EnemyTank enemyTank = new EnemyTank((100 * (i + 1)), 0, 2, 1);
            enemyTanks.add(enemyTank);
        }

    }


    @Override
    public void paint(Graphics g) {
        super.paint(g);

        //填充背景色
        g.fillRect(0, 0, 1000, 750);

        //画出玩家坦克
        drawTank(hero.getX(), hero.getY(), g, hero.getDirect(), hero.getSpeed(), 1);

        //画出敌人坦克
        for (int i = 0; i < enemyTankNums; i++) {
            EnemyTank enemyTank = enemyTanks.get(i);
            drawTank(enemyTank.getX(), enemyTank.getY(), g, enemyTank.getDirect(), enemyTank.getSpeed(), 0);
        }


    }

    /**
     * 绘画坦克
     *
     * @param x      左上角横坐标
     * @param y      左上角纵坐标
     * @param g      画笔
     * @param direct 坦克方向：0-上 1-右 2-下 3-左
     * @param speed  坦克速度
     * @param type   坦克类型：0-敌人 1-玩家
     */
    public void drawTank(int x, int y, Graphics g, int direct, int speed, int type) {
        //根据不同类型坦克，设置不同颜色
        switch (type) {
            case 0: //敌人的坦克
                g.setColor(Color.cyan);
                break;
            case 1: //玩家坦克
                g.setColor(Color.yellow);
                break;
        }

        //根据坦克方向，来绘制对应形状坦克
        switch (direct) {
            case 0: //表示向上
                g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
                g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
                g.fillOval(x + 10, y + 20, 20, 20);//画出圆形盖子
                g.drawLine(x + 20, y + 30, x + 20, y);//画出炮筒
                break;
            case 1: //表示向右
                g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克下边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆形盖子
                g.drawLine(x + 30, y + 20, x + 60, y + 20);//画出炮筒
                break;
            case 2: //表示向下
                g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
                g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
                g.fillOval(x + 10, y + 20, 20, 20);//画出圆形盖子
                g.drawLine(x + 20, y + 30, x + 20, y + 60);//画出炮筒
                break;
            case 3: //表示向左
                g.fill3DRect(x, y, 60, 10, false);//画出坦克上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克下边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆形盖子
                g.drawLine(x + 30, y + 20, x, y + 20);//画出炮筒
                break;
            default:
                System.out.println("坦克方向有误!");
        }


    }


    @Override
    public void keyTyped(KeyEvent e) {

    }

    //监听键盘下压事件，WDSA
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_W) {//W-向上
            //改变坦克方向
            hero.setDirect(0);
            //移动
            hero.moveUp();
        } else if (e.getKeyCode() == KeyEvent.VK_D) {//D-向右
            //改变坦克方向
            hero.setDirect(1);
            //移动
            hero.moveRight();
        } else if (e.getKeyCode() == KeyEvent.VK_S) {//S-向下
            //改变坦克方向
            hero.setDirect(2);
            //移动
            hero.moveDown();
        } else if (e.getKeyCode() == KeyEvent.VK_A) {//A-向左
            //改变坦克方向
            hero.setDirect(3);
            //移动
            hero.moveLeft();
        }

        //重绘画板
        this.repaint();

    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}
